package com.nageoffer.jobtrain.common.framework.idempotent;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 幂等性注解 - 防止消息队列中的消息被消费者多次消费
 *
 * @Target(ElementType.METHOD) 表示作用于方法上面
 * @Retention(RetentionPolicy.RUNTIME) 使用AOP机制在运行时动态加载
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoMQDuplicateConsume {
    /**
     * 设置防止重复令牌前缀 Key
     */
    String keyPrefix() default "";

    /**
     * 通过 SpEL表达式生成唯一的 Key
     */
    String key();

    /**
     * 设置防止重复令牌 key 过期时间，单位秒，默认 1小时
     */
    long keyTimeout() default 3600L;
}